from copy import deepcopy

# build
d1 = dict(one=1, two=2)
print(f"{d1 = }, {len(d1) = }")
d2 = dict(zip(d1.keys(), d1.values()))
print(f"{d2.keys().mapping = }, {d2.values().mapping = }")
d3 = {"one": 1, "two": 2}
print(f"{d2 = }, {d3 = }")

# iterate
for key, value in d1.items():
    print(f"key={key}, value={value}")

# modify
d1["six"] = 6
d1.update(ten=10)
print(f"{d1 = }")
d1["six"] = oct(6)
print(f'{d1["six"] = }')
del d1["six"]
print(f'{"six" in d1 = }')
print(f'{d1.pop("ten",None) = }')
print(f'{d1.get("ten",None) = }')

# copy
d = dict(a=[1, 2])
d2 = d.copy()
print(f"{id(d2) = }, {id(d) = }")
print(f'{id(d["a"]) = }, {id(d2["a"]) = }')
d3 = deepcopy(d)
print(f'{id(d3) = }, {id(d3["a"]) = }')

# operation
d1 = {"a": 1}
d2 = {"b": 2}
d3 = {"a": 3}
d1.update(d2)
print(f"{d1 = }")
merged = {**d1, **d3}
print(f"{merged = }")
merged.setdefault("a", 6)
merged.setdefault("c", 3)
print(f"{merged = }")
print(f"{merged.popitem() = }")
merged.clear()
print(f"{len(merged) = }")
